// 引入生成唯一ID的工具函数
import { uniqueId } from '@/utils';
// 引入事件总线，用于组件间通信
import eventBus from "@/utils/eventBus";

// Editor 编辑器核心类，封装对 G6 图的操作和事件分发
export default class Editor {
  constructor() {
    this.id = uniqueId(); // 编辑器唯一标识
  }
  // 获取当前 G6 图实例
  getGrpah() {
    return this.graph
  }
  /**
   * 事件分发，支持 afterAddPage 等事件
   * @param {string} event 事件名
   * @param {object} params 事件参数
   */
  emit(event, params) {
    if (event === 'afterAddPage') {
      this.graph = params.graph // 记录 G6 图实例
    }
    eventBus.$emit(event, params)
  }
  /**
   * 事件监听（目前仅支持 changeNodeData）
   * @param {string} event 事件名
   */
  on(event) {
    switch (event) {
      case 'changeNodeData':
        this.graph.refresh()
        break
    }
  }
  /**
   * 添加元素到图中
   * @param {string} type 元素类型（node/edge/group）
   * @param {object} item 元素数据
   */
  add(type, item) {
    this.graph.add(type, item)
  }
  /**
   * 更新元素数据
   * @param {object} item 元素对象
   * @param {object} model 新的数据模型
   */
  update(item, model) {
    this.graph.update(item, model)
  }
  /**
   * 从图中移除元素
   * @param {object} item 元素对象
   */
  remove(item) {
    const node = this.graph.findById(item.id)
    this.graph.remove(node)
  }
}